﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;


namespace Persistencia_y_capa_de_negocio
{
    public class CodMD5
    {
        public CodMD5()
        {

        }
        /// <summary>
        /// Función para convertir una cadena a MD5.
        /// </summary>
        /// <param name="cadena"></param>
        /// <returns></returns>
        public string convertiraMD5(string cadena)
        {
            // Creamos una instancia del MD5CryptoServiceProvider.
            MD5 md5Hasher = MD5.Create();

            // Convertimos el string de entrada en un array de bytes y ejecutamos la conversión.
            byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(cadena));

            // Creamos un nuevo STringBuilder para efectuar la transformación de los bytes en Hexadecimal.
            // and create a string.
            StringBuilder sBuilder = new StringBuilder();

            // Bucle que recorre cada byte del codigo MD5 y lo formatea en una cadena string hexadecimal.
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }

            // Devolvemos el string en MD5
            return sBuilder.ToString();
        }

        /// <summary>
        /// Comprueba una entrada en string.
        /// </summary>
        /// <param name="entrada"></param>
        /// <param name="hash"></param>
        /// <returns></returns>
        public bool comprobarMD5(string entrada, string hash)
        {
            // Convertimos en un MD5 la cadena de entrada
            string md5entrada = convertiraMD5(entrada);

            // Creamos un StringComparer y comparamos ambos MD5.
            StringComparer comparador = StringComparer.OrdinalIgnoreCase;
            
            if (comparador.Compare(md5entrada, hash) == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }


    }
}
